package com.dahuyou.tryy.too.simulate.interpreter.instructions.control.rtn;

import com.dahuyou.tryy.too.simulate.interpreter.instructions.base.InstructionNoOperands;
import com.dahuyou.tryy.too.simulate.interpreter.runtime.area.Frame;
import com.dahuyou.tryy.too.simulate.interpreter.runtime.area.Thread;

public class LRETURN extends InstructionNoOperands {

    @Override
    public void execute(Frame frame) {
        System.out.println("------lreturn 指令执行，做如下的事情：------");
        System.out.println("1:弹出当前的方法栈帧");
        System.out.println("2:获取上一个方法");
        System.out.println("3:从当前方法的操作数栈中获取执行结果,并推送到上一个方法的操作数栈中");
        Thread thread = frame.thread();
        Frame currentFrame = thread.popFrame();
        Frame invokerFrame = thread.topFrame();
        long val = currentFrame.operandStack().popLong();
        // 获取上一个方法，并将结果压倒其操作数栈的栈顶，这样，上一个就可以通过pop指令获取结果
        invokerFrame.operandStack().pushLong(val);
    }

}
